using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>gallery_images</code>.
    /// </summary>
    public interface IGalleryImageDAO : IGenericDAO<GalleryImage, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektów na podstawie galerii i strony.
        /// </summary>
        /// <param name="galleryId">galeria</param>
        /// <param name="pageId">strona</param>
        /// <returns>lista rekordów o zadanej galerii i stronie</returns>
        IQueryable<GalleryImage> FindByGalleryAndPage(int galleryId, int pageId);

        /// <summary>
        /// Pobieranie listy obiektów na podstawie nazwy galerii i strony.
        /// </summary>
        /// <param name="galleryName">nazwa galerii</param>
        /// <param name="pageId">strona</param>
        /// <returns>rekord o zadanej nazwie galerii i stronie</returns>
        IQueryable<GalleryImage> FindByGalleryNameAndPage(String galleryName, int pageId);

        /// <summary>
        /// Pobieranie listy obiektow na podstawie ich jezyka.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>lista rekordow o zadanym jezyku</returns>
        IQueryable<GalleryImage> FindByLanguage(int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);

        /// <summary>
        /// Pobieranie maksymalnego numeru porządkowego elementu dla danej strony i galerii.
        /// </summary>
        /// <param name="pageId">strona</param>
        /// <param name="galleryId">galeria</param>
        /// <returns>maksymalny numer porządkowy elementu dla danego menu.</returns>
        int? SelectMaxItemOrdering(int pageId, int galleryId);


        /// <summary>
        /// Usuwanie obiektów na podstawie galerii i strony.
        /// </summary>
        /// <param name="galleryId">galeria</param>
        /// <param name="pageId">strona</param>
        /// <returns>true w przypadku usunięcia, false w przypadku nie odnalezienia rekordu</returns>
        bool DeleteByGalleryAndPage(int galleryId, int pageId);

        /// <summary>
        /// Usuwanie obiektów na podstawie strony.
        /// </summary>
        /// <param name="pageId">strona</param>
        /// <returns>true w przypadku usunięcia, false w przypadku nie odnalezienia rekordów</returns>
        bool DeleteByPage(int pageId);

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);
    }
}
